/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Pruebas;

import Controlador.Controlador;
import Definiciones.Definiciones;

import GestorFarmacia.*;
import GestorCitas.*;
import GestorUsuarios.*;
import GestorClinico.*;

import java.io.IOException;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;

/**
 *
 * @author eslogan
 */
public class PruebasCarlos {
    public static void main (String[] args) throws ParseException, IOException, ClassNotFoundException, SQLException, IDException {
        

        Date fecha_caducidad, fecha_llegada;
        Integer id,unidades_iniciales,unidades_restantes,id_medicamento;

        //PRUEBA 1
/**Caso de prueba camino 1:
Se intenta obtener el lote dado un id y este falla al haber algún problema con la base de datos.
La función termina.
Este camino no se debería dar pero puede suceder por problemas con la base de datos.
Resultado esperado: La función termina con un mensaje de error.*/

        id=99999;
        SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy-MM-dd");
        String strFecha = "2007-12-25";
        Date fecha = null;
        fecha = formatoDelTexto.parse(strFecha);
        fecha_caducidad=fecha;
        fecha_llegada=fecha;
        unidades_iniciales=0;
        unidades_restantes=0;
        id_medicamento=0;
        String exito;
        //exito=Controlador.modificarLote(id,Definiciones.Estado.SUMINISTRADA,fecha_caducidad,fecha_llegada,unidades_iniciales, unidades_restantes,id_medicamento);
        //System.out.println(exito);

//Salida: Error: no se encontró el lote.
        //PRUEBA 2
/**Caso de prueba camino 2:
Se intenta obtener el lote dado un id y este falla al no existir en la base de datos.
Resultado esperado: La función termina con un mensaje de error.*/
        id=99999;
        strFecha = "2007-12-25";
        fecha = formatoDelTexto.parse(strFecha);
        fecha_caducidad=fecha;
        fecha_llegada=fecha;
        unidades_iniciales=0;
        unidades_restantes=0;
        id_medicamento=0;
        //exito=Controlador.modificarLote(id,Definiciones.Estado.SUMINISTRADA,fecha_caducidad,fecha_llegada,unidades_iniciales, unidades_restantes,id_medicamento);
        //System.out.println(exito);
//Salida: Error: el lote no existe en la Base de Datos.
        
        //PRUEBA 3
/*Caso de prueba camino 3:
Se realiza la modificación completa de un lote, es decir, se modifican todos los atributos del lote y se actualizan en la base de datos correctamente.
Resultado esperado: La función termina correctamente.
*/
        id=1;
        strFecha = "2010-12-12";
        fecha = formatoDelTexto.parse(strFecha);
        fecha_caducidad=fecha;
        fecha_llegada=fecha;
        unidades_iniciales=100;
        unidades_restantes=70;
        id_medicamento=1;
        //exito=Controlador.modificarLote(id,Definiciones.Estado.SUMINISTRADA,fecha_caducidad,fecha_llegada,unidades_iniciales, unidades_restantes,id_medicamento);
        //System.out.println(exito);
//Salida= null


        //PRUEBA 4
/**Caso de prueba camino 4:
Se encuentra el lote a modificar en la base de datos pero este no está inicializado por lo que no se realiza la modificación de ningún atributo del lote encontrado.
Este caso no se podrá dar ya que no se puede leer de la base de datos un lote con atributos nulos por lo que se debería de mostrar un mensaje de error.
Resultado esperado: La función termina correctamente al poder modificar el lote.*/

        id=1;
        strFecha = "2010-12-12";
        fecha = formatoDelTexto.parse(strFecha);
        fecha_caducidad=fecha;
        fecha_llegada=fecha;
        unidades_iniciales=100;
        unidades_restantes=70;
        id_medicamento=1;
        //exito=Controlador.modificarLote(id,Definiciones.Estado.SUMINISTRADA,fecha_caducidad,fecha_llegada,unidades_iniciales, unidades_restantes,id_medicamento);
        //System.out.println(exito);
        
//Salida= null

        //PRUEBA 5
/**Caso de prueba camino 5:
Se encuentra el lote a modificar en la base de datos pero no se modifica ningún atributo al no tener atributos válidos para modificar el lote (a la función se le pasan todos los atributos a NULL).
Resultado esperado: La función termina correctamente.*/

        id=1;
        fecha = null;
        fecha_caducidad=fecha;
        fecha_llegada=fecha;
        unidades_iniciales=null;
        unidades_restantes=null;
        id_medicamento=null;
        //exito=Controlador.modificarLote(id,null,fecha_caducidad,fecha_llegada,unidades_iniciales, unidades_restantes,id_medicamento);
        //System.out.println(exito);

//Salida= null

        //PRUEBA 6
/**Caso de prueba camino 6:
Se encuentra el lote a modificar en la base de datos pero este no está inicializado por lo que no se realiza la modificación de ningún atributo del lote encontrado. Además la función acaba con un mensaje de error al no poder actualizar el lote correctamente en la base de datos.
Este caso no se podrá dar ya que no se puede leer de la base de datos un lote con atributos nulos por lo que se debería de mostrar un mensaje de error.
Resultado esperado: La función termina con un mensaje de error.*/

        id=1;
        fecha = null;
        fecha_caducidad=fecha;
        fecha_llegada=fecha;
        unidades_iniciales=null;
        unidades_restantes=null;
        id_medicamento=null;
        //exito=Controlador.modificarLote(id,null,fecha_caducidad,fecha_llegada,unidades_iniciales, unidades_restantes,id_medicamento);
        //System.out.println(exito);

//Salida= Error al actualizar el lote.

       //PRUEBA 7
/**Caso de prueba camino 7:
Se realiza una modificación parcial de un lote, es decir, se modifican todos los atributos del lote en memoria pero no se actualizan en la base de datos. La función acaba con un mensaje de error al no poder actualizar el lote correctamente en la base de datos.
Este caso se puede dar por problemas en la base de datos.
Resultado esperado: La función termina con un mensaje de error.*/

        id=1;
        strFecha = "2010-12-12";
        fecha = formatoDelTexto.parse(strFecha);
        fecha_caducidad=fecha;
        fecha_llegada=fecha;
        unidades_iniciales=100;
        unidades_restantes=70;
        id_medicamento=1;
        //exito=Controlador.modificarLote(id,null,fecha_caducidad,fecha_llegada,unidades_iniciales, unidades_restantes,id_medicamento);
        //System.out.println(exito);

//Salida: Error al actualizar el lote.

        System.out.println("ALL OK!!");
    }
}

/*Pruebas hora*/
/*
        DateFormat fecha_formato = new SimpleDateFormat("yyyy-MM-dd");
        DateFormat Yformat = new SimpleDateFormat("yyyy");
        DateFormat Mformat = new SimpleDateFormat("MM");
        DateFormat Dformat = new SimpleDateFormat("dd");
        Calendar cal_fecha = Calendar.getInstance();
        cal_fecha.setTime(fecha_formato.parse("2011-04-27"));
        cal_fecha.add(Calendar.DAY_OF_YEAR, 385);
        Integer year = Integer.parseInt((Yformat.format(cal_fecha.getTime())).toString());
        Integer month = Integer.parseInt((Mformat.format(cal_fecha.getTime())).toString());
        Integer day = Integer.parseInt((Dformat.format(cal_fecha.getTime())).toString());
        String fecha = year.toString() + "-" + month.toString() + "-" + day.toString();
        System.out.println("Fecha final: "+fecha_formato.format(fecha_formato.parse(fecha)));
*/

 /**
	 * @brief Actualización de la información de un lote.
	 * @return NULL, si se modifica la información del lote y un mensaje de error en caso contrario
         * @throws IOException, ClassNotFoundException, ParseException
         * @author Ana Ferreira Blanco
	 *
        public static String modificarLote(Integer id, Definiciones.Estado estado, Date fecha_caducidad, Date fecha_llegada,
                  Integer unidades_iniciales, Integer unidades_restantes,Integer id_medicamento)
                  throws IOException, ClassNotFoundException, ParseException {
            Lote lote = null;
            try {
                lote = Lote.get(id);
            } catch (SQLException ex) {
               return "Error: no se encontró el lote.";
            }
            if (lote != null) { // Existe en la BD
                if(lote.getUnidadesInicialesLote() != null && unidades_iniciales != null){
                    lote.setUnidadesInicialesLote(unidades_iniciales);
                }
                if(lote.getUnidadesRestantesLote() != null  && unidades_restantes != null){
                    lote.setUnidadesRestantesLote(unidades_restantes);
                }
                if(lote.getFechaLlegadaLote() != null  && fecha_llegada != null){
                    lote.setFechaLlegadaLote(fecha_llegada);
                }
                if(lote.getFechaCaducidadLote() != null  && fecha_llegada != null){
                    lote.setFechaCaducidadLote(fecha_caducidad);
                }
                if(lote.getEstadoLote() != null && estado !=  null){
                    lote.setEstadoLote(estado);
                }
                if(lote.getIdMedicamento() != null && id_medicamento != null){
                    lote.setIdMedicamento(id_medicamento);
                }
            } else { //No existe en la BD
                return "Error: el lote no existe en la Base de Datos.";
            }
            try {
                Lote.update(lote);
            } catch (SQLException ex) {
                return "Error al actualizar el lote.";
            }
            return null;
        }
*/